﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using PreBuildGrupyz.Models;
using DAL;

namespace PreBuildGrupyz.Controllers
{
    public class ShoppingCartController : Controller
    {
        GrupyzEntities gr = new GrupyzEntities();

        //
        // GET: /ShoppingCart/

        public ActionResult Index()
        {
            var cart = ShoppingCart.GetCart(this.HttpContext);

            // Set up our ViewModel
            var viewModel = new ShoppingCartViewModel
            {
                CartItems = cart.GetCartItems(),
                CartTotal = cart.GetTotal(),
                ListaItems = GenerateNumbers()
            };

            // Return the view
            return View(viewModel);
        }

        private static List<SelectListItem> GenerateNumbers()
        {
            var numbers = (from p in Enumerable.Range(1, 5)
                           select new SelectListItem
                           {
                               Text = p.ToString(),
                               Value = p.ToString()
                           });
            return numbers.ToList();
        }

        //
        // GET: /Store/AddToCart/5

        [HttpPost]
        public ActionResult AddToCart(int id, bool Oferta = false)
        {
            string Msg;
            bool error;

            var AddDeal = gr.Deal
                .Single(deal => deal.Id == id);

            // Add it to the shopping cart
            var cart = ShoppingCart.GetCart(this.HttpContext);

            if (cart.AddToCart(AddDeal,Oferta))
            {
                Msg = AddDeal.Descricao + " foi adicionado ao carrinho.";
                error = false;
            }
            else
            {
                Msg = AddDeal.Descricao + " não foi adicionado ao carrinho. Quantidade máxima atingida.";
                error = true;
            }
            // Go back to the main store page for more shopping
            return Json(new ShoppingCartAddViewModel { Message = Msg ,
            Quantidade = cart.GetCount(), Error = error});
        }

        //
        // AJAX: /ShoppingCart/RemoveFromCart/5

        [HttpPost]
        public ActionResult RemoveFromCart(int id)
        {
            // Remove the item from the cart
            var cart = ShoppingCart.GetCart(this.HttpContext);

            // Get the name of the album to display confirmation
            string DealName = gr.Cart.Include("Deal")
                .Single(item => item.Id == id).Deal.Descricao;

            // Remove do cart, True remove todos os items
            cart.RemoveFromCart(id,true);

            // Display the confirmation message
            var results = new ShoppingCartRemoveViewModel
            {
                Message = DealName + " foi removido do carrinho de compras.",
                CartTotal = cart.GetTotal(),
                CartCount = cart.GetCount(),
                DeleteId = id,
                LastCartCount = cart.LastCartCount,
                ValorUn = cart.GetTotalByID(id)
            };
            return Json(results);
        }

        [HttpPost]
        public ActionResult ActualizaCart(string id, int qtd)
        {
            int Id = int.Parse(id.Replace("dropQtd-", ""));
            var cart = ShoppingCart.GetCart(this.HttpContext);
            cart.AddToCart(Id,qtd);
            
            
            return Json(new ShoppingCartAddViewModel
            {
                Message = "",
                Quantidade = cart.GetCount(),
                ValorUn = cart.GetTotalByID(Id),
                CartTotal = cart.GetTotal(),
                AddId = Id
            });
        }


        [HttpPost]
        public ActionResult DadosOferta(int id,string NomeDe,string NomePara, string Email, string Mensagem, bool Imprimo)
        {

            var cartItem = (from x in gr.Cart
                           where x.Id == id
                           select x).SingleOrDefault();

            cartItem.DadosOferta.EmailDest = Email;
            cartItem.DadosOferta.EuImprimo = Imprimo;
            cartItem.DadosOferta.Mensagem = Mensagem;
            cartItem.DadosOferta.NomeDe = NomeDe;
            cartItem.DadosOferta.NomePara = NomePara;

            gr.SaveChanges();

            return null;
        }


        //
        // GET: /ShoppingCart/CartSummary

        [ChildActionOnly]
        public ActionResult CartSummary()
        {
            var cart = ShoppingCart.GetCart(this.HttpContext);

            ViewData["CartCount"] = cart.GetCount();

            return PartialView("CartSummary");
        }
    }

}
